package com.javaee.wordtree.entity;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

import java.util.Date;
import java.util.List;

/**
 * 带有RAG增强信息的消息响应实体类
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MessageWithRagInfo {

    /**
     * 消息ID
     */
    private Integer messageId;

    /**
     * 聊天ID
     */
    private Integer chatId;

    /**
     * 消息文本
     */
    private String text;

    /**
     * 是否为用户发送的消息
     */
    private Boolean isUser;

    /**
     * 消息发送时间
     */
    private Date createdTime;

    /**
     * RAG增强信息
     */
    private RagEnhancementInfo ragInfo;

    /**
     * 从Message实体构造MessageWithRagInfo
     * 
     * @param message Message实体
     */
    public MessageWithRagInfo(Message message) {
        this.messageId = message.getMessageId();
        this.chatId = message.getChatId();
        this.text = message.getText();
        this.isUser = message.getIsUser();
        this.createdTime = message.getCreatedTime();
    }

    /**
     * RAG增强信息内部类
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class RagEnhancementInfo {

        /**
         * 是否基于RAG回答
         */
        private Boolean basedOnRag;

        /**
         * 检索到的RAG信息数量
         */
        private Integer ragCount;

        /**
         * 过滤后有效的RAG信息数量
         */
        private Integer validRagCount;

        /**
         * 平均相似度（可信度）
         */
        private Double averageSimilarity;

        /**
         * 最高相似度
         */
        private Double maxSimilarity;

        /**
         * 最低相似度
         */
        private Double minSimilarity;

        /**
         * 相似度阈值
         */
        private Double similarityThreshold;

        /**
         * RAG结果详情（可选，用于调试）
         */
        private List<RagResultSummary> ragResults;
    }

    /**
     * RAG结果摘要信息
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class RagResultSummary {

        /**
         * 相似度
         */
        private Double similarity;

        /**
         * 问题摘要（截取前50个字符）
         */
        private String questionSummary;

        /**
         * 答案摘要（截取前100个字符）
         */
        private String answerSummary;
    }
}
